import { Message } from 'element-ui'
import router from './router'
import store from './store'
// import { removeToken } from './utils/auth'

// 白名单数组
const whitelist = ['/login', '/404']
// 导航守卫
router.beforeEach(async(to, from, next) => {
  const _token = store.getters.token
  // 判断是否有token
  if (_token) {
    // token存在情况下  用户信息存在 且用户要去往登录页 让他去首页
    if (store.getters.isLogin && to.path === '/login') {
      return next('/')
    }
    // token存在情况下  用户信息存在 不是去往登录页 就让行
    if (store.getters.isLogin) {
      return next()
    }

    try {
      // token存在情况下  用户信息不存在 尝试获取信息
      await store.dispatch('user/getUserInfo')
      // token没问题获取信息成功时 用户要去往登录页 就让他去主页
      await store.dispatch('permission/filterRoutes')
      if (to.path === '/login') {
        return next('/')
      }
      // token没问题获取信息成功时 用户要去往非登录页 让行
      return next(to)
    } catch (error) {
      // token有问题删除token
      // removeToken()
      // 优化删干净token且删掉用户数据
      store.dispatch('user/logout')
      // 提示重新登陆
      Message.error('请重新登录')
      // 如果用户要去网登录页就放行
      if (to.path === '/login') {
        return next()
      }
      // 如果用户要去往其他页面就让他去登陆页面 to对象包含跳转时的所有信息 fullpath为完整来源路径
      return next({ path: '/login', query: { redirect: to.fullPath }})
    }

    // 如果有再判断是否为login页面
    // if (to.path === '/login') {
    //   // 为login页面就跳去主页
    //   return next('/')
    // }
    // // 否则让行
    // return next()
  }
  // 没有token时判断是否白名单
  if (whitelist.includes(to.path)) {
    // 是的话让行
    return next()
  }
  // 否则去登录页
  next('/login')
})
